tg-me.com/nlp_stuff/310
Last Update:
بحر در کوزه این بار با HF!
احتمالا تا حالا شده که در مسیر تسکهای NLP به دیوار سخت و خشن یک دیتاست بزرگ برخورده باشید (مثلا یک دیتاست در اندازه چند ده گیگابایت که شاید حتی جایی برای ذخیرهسازیش در دیسک نداشته باشید چه برسه به رم). در این حالته که دستها رو به نشانه تسلیم بالا میبرید. اما هاگینگفیس در کتابخانه Datasets🤗 این مشکل رو حل کرده. در واقع با دو قابلیت memory mapping و streaming که این کتابخانه فراهم کرده بر محدودیت رم و دیسک غلبه میکنید. قابلیت memory mapping (که به صورت پیشفرض فعاله) به این اشاره داره که با لودکردن هر دیتاستی توسط Datasets🤗 این کتابخانه یه سری cache file از دیتاست میسازه که بر روی دیسک ذخیره شدند و عینا همون محتویات دیتاست لودشده در RAM هستند. پس یه جور آیینه تمامنمای RAM محسوب میشه و از این جا به بعد دیگه این کتابخانه یه اشارهگر به اول این فایل باز میکنه و دیتا به صورت batch داخل رم لود میشه. طبیعتا آموزش مدل از اینجا به بعد I/O bounded خواهد بود اما نگران اون قسمتش هم نباشید چون فرمتی که برای کار با این فایلها استفاده میکنه Apache Arrow هست که یه فرمت بهینهشده است. از طرفی برای اینکه نعمت رو بر ما تکمیل کرده باشه و حتی نگران کمبود دیسک هم نباشیم قابلیت streaming رو تعریف کرده که ینی میتونید از هاب دیتاست هاگینگفیس، دیتاست رو به صورت batch و on the fly دانلود کنید و پردازش انجام بدید (که به صورت پیشفرض فعال نیست و باید streaming=True باشه). البته با استفاده از این قابلیت امکان random access به دیتاها رو از دست میدید (مثلا نمیتونید دستور dataset[2335] رو ران کنید چون آبجکتی که میسازه حالت iterable داره و شبیه generatorهای پایتونیه) ولی با دستور next و iterate کردن بر روی دیتاست، دقیقا سمپلهای یک دیتاست استریمنشده رو میگیرید. پس دیگه بهونه بسه و پاشید کار با دیتاستهای بزرگ رو شروع کنید.
پ.ن: در تصاویر یه سری نمونه کدهایی آوردیم که از فصل ۱۰ کتاب گرانسنگ NLP with Transformers گرفته شده که اثری جاوید از هاگینگفیسه.
#handsOn
@nlp_stuff
BY NLP stuff

Share with your friend now:
tg-me.com/nlp_stuff/310